package main

import (
	"fmt"
)

type IPeople interface {
	hello()
}
type People struct {
}

func (p *People) hello() {
	fmt.Println("github.com/meetbetter")
}

// 正确的处理接口返回值的方法，是直接将nil赋给interface
func errFunc1(in int) *People {
	if in == 0 {
		fmt.Println("errFunc1 返回了一个nil")
		return nil
	} else {
		fmt.Println("errFunc1 返回了一个非nil值")
		return &People{}
	}

}

// 正确的处理接口返回值的方法，是直接将nil赋给interface
func errFunc2(in int) IPeople {
	if in == 0 {
		fmt.Println("errFunc1 返回了一个nil")
		return nil
	} else {
		fmt.Println("errFunc1 返回了一个非nil值")
		return &People{}
	}

}

func main() {
	var i IPeople

	in := 0
	{
		i = errFunc1(in)
		if i == nil {
			fmt.Println("哈，外部接收到也是nil")
		} else {
			fmt.Println("咦，外部接收到不是nil哦")
			fmt.Printf("%v, %T\n", i, i)
		}
	}

	fmt.Println("-----------")
	{
		i = errFunc2(in)
		if i == nil {
			fmt.Println("哈，外部接收到也是nil")
		} else {
			fmt.Println("咦，外部接收到不是nil哦")
			fmt.Printf("%v, %T\n", i, i)
		}
	}

}
